package com.itheima.web.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.entity.TbSku;
import com.itheima.entity.dto.TbSkuDto;
import com.itheima.service.TbSkuService;
import com.itheima.utils.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/api/vm-service/sku")
@Slf4j
public class TbSkuController {
    @Autowired
    TbSkuService tbSkuService;

    /**
     * 商品管理分页查询
     *
     * @param pageIndex
     * @param pageSize
     * @return
     */
    @GetMapping("/search")
    public Page<TbSkuDto> selectPage(Integer pageIndex, Integer pageSize) {
        return tbSkuService.PageSku(pageIndex, pageSize);
    }

    /**
     * 商品管理添加商品
     */
    @PostMapping
    public Boolean updateSku(@RequestBody TbSku tbSku) {
        return tbSkuService.updateSave(tbSku);
    }

    /**
     * 文件上传
     */
    @Value("${lkd.path}")
    private String BasePath;

    @PostMapping("/fileUpload")
    public String upload(MultipartFile fileName) throws IOException {
        log.info(fileName.toString());
        String filename = fileName.getOriginalFilename();

        //获取表单项的name值
        String name = fileName.getName();
        System.out.println("name = " + name);

        //获取文件后缀名
        // 7. 获取文件的原始文件名，通过原始文件名获取文件后缀
        String originalFilename = fileName.getOriginalFilename();
        String[] strs = originalFilename.split("\\.");

        String fileSuffix = strs[strs.length - 1];
        log.info("上传文件后缀为{}", fileSuffix);

        // 2. 使用`UUID`生成新的文件名，避免重名；
        String fileNameWithPath = FileUtil.getFileNameWithPath();

        // 3. 通过随机算法分配创建多级目录，避免一个目录中存放过多文件
        FileUtil.makeDirs(fileNameWithPath, BasePath);

        // 4. 将上传的临时文件转存到指定位置
        fileName.transferTo(new File(BasePath, fileNameWithPath + "." + fileSuffix));

        // 5. 组织数据，响应数据
        return "文件上传成功" + fileNameWithPath + "." + fileSuffix;
    }

    /**
     * 修改商品
     *
     * @param id
     * @return
     */
    @PutMapping("{id}")
    public Boolean update(@PathVariable Long id,@RequestBody TbSku tbSku) {
        tbSku.setSkuId(id);
        tbSkuService.updateById(tbSku);
        return true;
    }
}